package com.syedu.day20;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author Administrator
 * @Description 服务端套接字
 * @createTime 2022/4/12 9:54
 */
public class ServerSocketDemo {
    public static void main(String[] args) {
        /**
         * 创建服务端套接字对象
         * 参数:通信端口
         * 注意:如果开启多个服务器,会出现端口占用,则抛出异常:
         * java.net.BindException: Address already in use: bind
         */
        try (ServerSocket serverSocket = new ServerSocket(8888)) {
            //获取当前使用的端口
            System.out.println("服务器已经启动,正在监听:[" + serverSocket.getLocalPort() + "]端口...");
            /**
             * 等待客户端的连接
             * 注意:如果没有客户端来连接,则accept()方法会一直等待阻塞,当有客户端连接成功,则该方法返回一个连接成功的
             * 客户端套接字对象
             */
            while (true) {
                Socket socket = serverSocket.accept();
                //多线程
                new Thread(() -> {
                    try {
                        //获取连接成功的客户端的信息,例如IP地址
                        String ip = socket.getInetAddress().getHostAddress();
                        System.out.println("[" + ip + "]上线了...");
                        //接收客户端发送的信息
                        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                        String message = reader.readLine();
                        System.out.println("[" + ip + "]说: " + message);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
